#pragma once

#include <rclcpp/rclcpp.hpp>
#include "slam_robot/serial_bridge.hpp"
#include "odometry_publisher.hpp"
#include <tf2_ros/static_transform_broadcaster.h>
/**
 * @class MainNode
 * @brief 主节点，整合所有功能
 * 
 * 该类负责：
 * 1. 创建SerialBridge实例
 * 2. 创建OdometryPublisher实例
 * 3. 订阅速度控制命令
 * 4. 设置静态TF变换
 */
class MainNode : public rclcpp::Node {
public:
    MainNode(); // 构造函数
    
    // 获取SerialBridge实例
    std::shared_ptr<SerialBridge> get_serial_bridge() const { return serial_; }

private:
    void setupStaticTransforms(); // 设置静态TF变换
    
    std::shared_ptr<SerialBridge> serial_;          // 串口通信模块
    std::shared_ptr<OdometryPublisher> odom_publisher_; // 里程计发布器
    
    rclcpp::Subscription<geometry_msgs::msg::Twist>::SharedPtr cmd_vel_sub_; // 速度命令订阅器
    
    // 静态TF广播器
    std::shared_ptr<tf2_ros::StaticTransformBroadcaster> static_tf_broadcaster_;
};